Lo que estoy tratando de lograr es tener ID aleatorias en un nodo dedicado en Firebase Realtime Database, mientras puedo verificar si ya existe una ID en el nodo antes de escribirla para evitar la duplicidad.
Estoy trabajando con web React (JavaScript).
La base de datos actualmente se ve así:
Lo que busco es tener otro nodo con ID en el siguiente formato:
Nota: las ID generadas en el nodo 'usuarios' son diferentes de las de 'ids', no están conectadas.
Firebase no debe generar claves de ID en pares [clave: valor], como 'abcd' (como lo hace el método push()).
En su lugar, los ID se generan por separado antes de escribir los datos.
Hasta ahora, encontré algunos recursos con preguntas similares, pero estaban relacionados con una plataforma diferente con otra sintaxis o estaban desactualizados.
Mi código actual para leer ID del nodo 'ids' parece estar funcionando, si el nodo con ID se crea manualmente en la consola de la base de datos, pero parece que todavía necesito ayuda con el código para escribir datos en el formato deseado.
Este es el código para leer datos:
function checkIdDuplicity(id) { const database = getDatabase(); get(child(ref(database), 'ids/')) .then((snapshot) => { if (snapshot.exists()) { // Snapshot exists, find possible duplicate if (snapshot.hasChild(id)) { // Such ID is already in database console.log("ID already exists"); return true; } else { // ID is unique return false; } } else { // No IDs in database, node shall be created return false; } }) .catch((error) => { console.log(error); }); }¿Alguien tiene alguna idea? 🙂
Para agregar un nodo con clave personalizada, debe usar set() en lugar de push() .
const nodeRef = child(ref(database), "ids/" + id); // id = custom ID you want to specify await set(nodeRef, { ...data }) Además, está descargando ids/ nodos completos para verificar la existencia de un identificador determinado. En su lugar, puede simplemente descargar esa ID en particular:
// specify the custom ID to check for in ref get(child(ref(database), 'ids/' + id)) .then((snapshot) => { if (snapshot.exists()) { console.log("ID already exists in database") } else { console.log("ID does not exist in database") } })